package com.example.myapplication.utils;

import android.media.MediaMetadataRetriever;
import android.os.Build;

import com.example.myapplication.bean.AudioBean;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

/**
 * 多媒体工具类，获取音频数据
 */
public class AudioInfoUtils {
    private MediaMetadataRetriever mediaMetadataRetriever;//获取音频文件的相关内容

    private AudioInfoUtils() {
    }

    /**
     * 实现了单例模式，用于获取AudioInfoUtils类的实例。如果实例还没有被创建，它将使用同步块来确保只有一个线程可以
     * 创建实例。如果实例已经存在，则直接返回该实例。这样，在整个应用程序的生命周期内，只会有一个AudioInfoUtils实例。
     */
    private static AudioInfoUtils utils;

    public static AudioInfoUtils getInstance() {
        if (utils == null) {
            synchronized (AudioInfoUtils.class) {
                if (utils == null) {
                    utils = new AudioInfoUtils();
                }
            }
        }
        return utils;
    }

    /**
     * 该函数接受文件路径作为参数，如果不存在则创建一个新的MediaMetadataRetriever类实例。
     * 然后将MediaMetadataRetriever的数据源设置为提供的文件路径，使用METADATA_KEY_DURATION常量
     *
     * @return time
     */
    public long getAudioFileDuration(String filePath) {
        long duration = 0L;
        if (mediaMetadataRetriever == null) {
            mediaMetadataRetriever = new MediaMetadataRetriever();
        }
        mediaMetadataRetriever.setDataSource(filePath);
        String s = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
        duration = Long.parseLong(s);
        System.out.println(duration + "毫秒数");
        return duration;
    }


    /**
     * utc
     *
     * @param format
     * @param longDuration
     * @return 格式化后的日期
     */
    public String getAudioFileFormattedDuration(String format, long longDuration) {
        SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.CHINA);
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+00:00"));
        return sdf.format(new Date(longDuration));
    }

    //方法重写,减去8小时
//    public String getAudioFileFormattedDuration(long longDuration) {
//        longDuration = longDuration-(8*60*60*1000);
//        return getAudioFileFormattedDuration("HH:mm:ss", longDuration);
//
//    }

    /**
     * 获取音频文件的作者
     */
    public String getAudioFileAuthor(String filePath) {
        if (mediaMetadataRetriever == null) {
            mediaMetadataRetriever = new MediaMetadataRetriever();
        }
        mediaMetadataRetriever.setDataSource(filePath);
        String author = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR);
        return author;

    }

    public void releaseRetriever() throws IOException {
        if (mediaMetadataRetriever != null) {
            mediaMetadataRetriever.release();
            mediaMetadataRetriever = null;
        }
    }
}
